package com.tinfeng.uplevel;

public class JavaEnums {
    // 什么是xxx
    // 为什么要使用xxx
    // 如何运用xxx
    // 小结


    // Java枚举类
    // 枚举是一个被命名的整型常数的集合。枚举在生活中非常常见，列举如下：
    //
    //表示星期几：SUNDAY、MONDAY、TUESTDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举；
    //性别：MALE（男）、FEMALE（女）也是一个枚举；
    //订单的状态：PAIDED（已付款）、UNPAIDED（未付款）、FINISHED（已完成），CANCELED（已取消）。
    //知道了什么是枚举，我们就很容易理解什么是枚举类了，简单来说，枚举类就是一个可以表示枚举的类，当一个类的对象只有有限个、确定个的时候，我们就可以定义一个枚举类来存放这些对象。

    /**
     * Java 5.0 之后自定义枚举类
     * 在 Java 5.0 后，可以使用eunm关键字来定义一个枚举类，比较便捷，推荐大家使用这个方法来定义枚举类。
     *
     * 通常需要以下几个步骤：
     *
     * 使用enum关键字定义枚举类，这个类隐式继承自java.lang.Enum类；
     * 在枚举类内部，提供当前枚举类的多个对象，多个对象之间使用逗号分割，最后一个对象使用分号结尾；
     * 声明枚举类的属性和构造方法，在构造方法中为属性赋值；
     * 提供 getter 方法，由于Enum类重写了 toString()方法，因此一般不需要我们自己来重写。
     */

    /**
     * Enum 类
     * java.lang.Enum类 是 Java 语言枚举类型的公共基类，我们使用enum关键字定义的枚举类，是隐式继承自Enum类的，下面我们来看一下Enum类的常用方法：
     *
     * values()：返回枚举类型的对象数组。该方法可以很方便的遍历所有的枚举值；
     * valueOf()：可以把一个字符串转换为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”，如果不是，会抛出IllegalArguementException；
     * toString()：返回当前枚举类对象常量的名称。
     */

    // 使用 enum 关键字定义枚举类，默认继承自 Enum 类
    enum Sex{
        // 1.提供当前枚举类的多个对象，多个对象之间使用逗号分割，最后一个对象使用分号结尾
        AirPlane("飞机"),
        Car("汽车"),
        Bicycle("自行车")
        ;
        //声明枚举类的属性
        private final String tools;

        Sex(String tools) {
            this.tools = tools;
        }

        // 提供 getter 和 setter

        public String getTools() {
            return tools;
        }
    }

    public static void main(String[] args) {
        Sex airPlane = Sex.AirPlane;
        // 取值
        System.out.println(airPlane.getTools());
        // 直接打印枚举名
        System.out.println(airPlane.toString());

        // values方法  遍历枚举名不是值
        Sex[] values = Sex.values();
        for (Sex value:values
             ) {
            System.out.println(value);
        }
        System.out.println("valueOf方法");
        Sex car = Sex.valueOf("Car");
        System.out.println(car);
        // 学的我有点懵逼
    }
}
